package com.kl.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {

    /**
     * RestTemplate() 默认构造函数设置了一系列 HttpMessageConverter
     * 项目里引入了 com.fasterxml.jackson，所以 RestTemplate() 会构造一个
     * MappingJackson2HttpMessageConverter加到它的 messageConverters 中
     * 默认构造的 MappingJackson2HttpMessageConverter 中的 supportedMediaTypes
     * 只支持：application/json 的 MediaType
     * 不推荐把 WxMappingJackson2HttpMessageConverter 实例当作构造 RestTemplate 时的参数来构造 RestTemplate，
     * 也不推荐 使用新的 WxMappingJackson2HttpMessageConverter 替换 RestTemplate 默认构造中
     * 创建的 MappingJackson2HttpMessageConverter 实例，
     * 因为这两种方式都会导致 Content-Type 为 application/json 的 Json 响应没有转换器来反序列化，
     * 所以最佳的方式还是“追加”
     */
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
        RestTemplate restTemplate = new RestTemplate(factory);
        restTemplate.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter());
        return restTemplate;
    }

    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setConnectTimeout(15000);
        factory.setReadTimeout(5000);
        return factory;
    }
}
